﻿#pragma once

using namespace System;
using namespace System::Collections::Generic;
using namespace System::Text;

namespace $RootNamespace$
{

	/// The '$AbstractProductA$' abstract class
	private ref class $AbstractProductA$ abstract
	{

	};


	/// The '$AbstractProductB$' abstract class
	private ref class $AbstractProductB$ abstract
	{

	public:
		virtual void Interact($AbstractProductA$^) abstract;

	};


	/// The '$ProductA1$' class
	private ref class $ProductA1$ : $AbstractProductA$
	{

	};

	/// The '$ProductB1$' class
	private ref class $ProductB1$ : $AbstractProductB$
	{

	public:
		virtual void Interact($AbstractProductA$ ^a) override;

	};

	/// The '$ProductA2$' class
	private ref class $ProductA2$ : $AbstractProductA$
	{

	};

	/// The '$ProductB2$' class
	private ref class $ProductB2$ : $AbstractProductB$
	{

	public:
		virtual void Interact($AbstractProductA$ ^a) override;

	};


}
